module ser2tmds(
    input          ser_clk_i,
    input  [2:0]   ser_data_i,

    output         tmds_clk_p,
    output         tmds_clk_n,

    output  [2:0]  tmds_data_p,
    output  [2:0]  tmds_data_n
);

// 使用Xilinx的原语将单端的信号转为差分的HDMI信号

OBUFDS #(
    .IOSTANDARD     ("TMDS_33"),
    .SLEW           ("FAST")
)clk_obufds(
    .I  (ser_clk_i),
    .O  (tmds_clk_p),
    .OB (tmds_clk_n)
);

generate
    genvar i;
    for (i=0; i<3; i=i+1) begin
        OBUFDS #(
            .IOSTANDARD     ("TMDS_33"),
            .SLEW           ("FAST")
        )data_obufds(
            .I  (ser_data_i[i]),
            .O  (tmds_data_p[i]),
            .OB (tmds_data_n[i])
        );
    end
endgenerate

endmodule